package com.itheima.Test;

import com.itheima.utils.POIUtils;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.Test;

import java.io.*;

public class Poi_Test {






    @Test
    /*
    * 读取本地xls文件（方式一）
    * */
    public void Test1() throws IOException {

        //读取本地xls文件
        XSSFWorkbook sheets = new XSSFWorkbook(new FileInputStream("D:\\POI_Test.xlsx"));
//        循环读取xls文件中的每一sheet(页)
       for (Sheet sheet : sheets) {
//           循环读取每一页的每一行
           for (Row cells : sheet) {
//               循环每一行的每一个单元格（列）
               for (Cell cell : cells) {
//                   打印每个单元格的内容
                   System.out.println(cell.getStringCellValue());
               }
           }
       }

    }

    /*
     * 读取本地xls文件（方式二）
     * */
    @Test
    public void Test2() throws IOException {
        //读取XSL文件
        XSSFWorkbook sheets = new XSSFWorkbook(new FileInputStream("D:\\POI_Test.xlsx"));
//        获取SXL的第一页
        XSSFSheet sheet = sheets.getSheetAt(0);
        //获取第一页的最后的行数（获取XSL的第一页数据一共多少行）
        int LastRowNum = sheet.getLastRowNum();//（注意，行号的索引是从0开始的，所以 XSL表中如果是5行，则获取最后的行号为4）
        for(int i = 0 ; i<=LastRowNum ; i++){  //循环遍利每一行
            XSSFRow row = sheet.getRow(i); //获取每一行
            short lastCellNum = row.getLastCellNum();//获取最后的列数（该行一共多少列）
            for (int j = 0; j <lastCellNum; j++) {  //循环遍利每一列（每一个单元格）
                XSSFCell cell = row.getCell(j);  //获取到每一个单元格
                System.out.println(cell.getStringCellValue());//输出每一个单元格里的内容
            }
        }
    }

    /*
     * 向本地写入XLS文件
     * */
    @Test
    public void Test3() throws IOException {
        XSSFWorkbook sheets = new XSSFWorkbook();  //在内存中创建一个虚拟XLS文件
        XSSFSheet sheet = sheets.createSheet("黑马程序员"); //创建第一页
        XSSFRow row = sheet.createRow(0);//创建第一行

        XSSFCell cell = row.createCell(0);//创建第一列
        cell.setCellValue("姓名");  //向第一行第一列的单元格写入数据；

        XSSFCell cell1 = row.createCell(1);//创建第二列
        cell1.setCellValue("地址");  //向第一行第二列的单元格写入数据；

        XSSFCell cell2 = row.createCell(2);//创建第三列
        cell2.setCellValue("年龄");  //向第一行第三列的单元格写入数据；



        XSSFRow row2 = sheet.createRow(1);//创建第二行

        XSSFCell cell3 = row2.createCell(0);//创建第一列
        cell3.setCellValue("张三");  //向第二行第一列的单元格写入数据；

        XSSFCell cell4 = row2.createCell(1);//创建第二列
        cell4.setCellValue("太原");  //向第二行第二列的单元格写入数据；

        XSSFCell cell5 = row2.createCell(2);//创建第三列
        cell5.setCellValue("24");  //向第二行第三列的单元格写入数据；

        //创建输出流，将虚拟内存中XLS文件写入硬盘；
        OutputStream outputStream = new FileOutputStream("D:\\Test.xlsx");
        sheets.write(outputStream);
        outputStream.flush(); //刷新
        outputStream.close();//释放流


    }


}
